#ifndef UDP_H
#define UDP_H

#include <stdint.h>

#include "ipaddr.h"

#pragma pack(1)

// udp包头结构
typedef struct _udp_hdr_t
{
    uint16_t src_port;  // 源端口号
    uint16_t dest_port; // 目的端口号
    uint16_t total_len; // UDP数据报总长度
    uint16_t checksum;  // 校验和
} udp_hdr_t;

// udp数据报结构
typedef struct _udp_pkt_t
{
    udp_hdr_t hdr;     // UDP包头
    uint8_t data[1];   // UDP数据部分，大小至少为1字节
} udp_pkt_t;

// udp数据报来源
typedef struct _udp_from_t
{
    ipaddr_t ip;       // 来源IP地址
    uint16_t port;     // 来源端口号
}udp_from_t;

typedef struct {
    uint16_t src_port;
    uint16_t dest_port;
    uint16_t length;
    uint16_t checksum;
    uint8_t  payload[];
} UDPHeader;



int udp_make_reply(eqos_context_t *pctx,uint8_t *pdat,int tlen);


int udp_send_packet(eqos_context_t *pctx, const uint8_t *dest_mac, const uint8_t *dest_ip, 
    uint16_t dest_port, uint16_t src_port, const uint8_t *payload, uint16_t payload_len);


#endif